package com.zh.mycommon.viewdata;


import org.jetbrains.annotations.Nullable;

import java.util.List;

/**
 * 定义父子层级的数据
 * 子类必须要定义空构造方法
 * K表示ID的类型，类型取值为：String、Integer、Long
 */
public interface TreeData<K extends Comparable<?>> {

    void setId(K id);

    K getId();

    K getParentId();

    /**
     * 获取子节点list
     *
     * @return 如果是叶子节点，有可能返回null或空集合
     */
    @Nullable
    List<? extends TreeData<?>> getChildren();

    void addChildren(List<? extends TreeData<?>> children);

    /**
     * 若需要标记是否是叶子节点时，子类需重写
     * <p>
     * 示例1：假设 category对象,只有level=3才是叶子节点
     * public boolean isLeaf() {
     * return level==3;
     * }
     * 示例2：假设 category对象,children为空的就是叶子节点
     * public boolean isLeaf() {
     * return children==null || children.isEmpty();
     * }
     * </p>
     *
     * @return 是不是叶子节点
     */
    default boolean isLeaf() {
        return false;
    }
}

